﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BO;

namespace Site_CamaraTibau
{
    public partial class frmComissoes : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    TipoComissoesBO.Listar(ddlTipoComissao);
                    VereadorBO.Listar(ddlPresidente);
                    VereadorBO.Listar(ddlVicePresidente);
                    VereadorBO.Listar(ddlVereador);
                    VereadorBO.Listar(ddlMembro);
                    mtv.SetActiveView(viewListagem);
                }
            }
            catch (Exception)
            {

                throw;
            }
        }


        #region Contexto
        ModeloContainer bco = new ModeloContainer();
        #endregion

        #region Funções
        public void pesquisar()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {

                var objs = (from a in bco.Comissoes select a).ToList();

                if (objs != null)
                {
                    if (!string.IsNullOrEmpty(txtPesquisarID.Text.Trim()))
                    {
                        int id = int.Parse(txtPesquisarID.Text.Trim());

                        objs = objs.FindAll(a => a.idTipoComissoes == id).ToList();
                    }

                    if (!string.IsNullOrEmpty(txtPesquisarSigla.Text.Trim()))
                    {
                        string texto = txtPesquisarSigla.Text.Trim().ToLower();

                        objs = objs.FindAll(a => a.Sigla.ToLower().Contains(texto)).ToList();
                    }

                    if (!string.IsNullOrEmpty(txtPesquisarTitulo.Text.Trim()))
                    {
                        string texto = txtPesquisarTitulo.Text.Trim().ToLower();

                        objs = objs.FindAll(a => a.Titulo.ToLower().Contains(texto)).ToList();
                    }

                }

                var objs2 = (from a in objs
                             orderby a.Titulo ascending
                             select new
                             {
                                 ID = a.idTipoComissoes,
                                 Sigla = a.Sigla,
                                 Titulo = a.Titulo,
                                 DtCriacao = a.dtCriacao.ToShortDateString()
                             }).ToList();

                gvListagem.DataSource = objs2;
                gvListagem.DataBind();


                if (objs2.Count == 1)
                    lblNumeroLinhas.Text = "Foi encontrado " + objs2.Count + " registro.";
                else if (objs2.Count > 1)
                    lblNumeroLinhas.Text = "Foram encontrados " + objs2.Count + " registros.";
                else
                    lblNumeroLinhas.Text = "";

                mtv.SetActiveView(viewListagem);
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }

        }
        public void atualizaListagem()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                
                var objs = (from a in bco.ComposicaoComissoes select a).ToList();

                var objs2 = (from a in objs
                             orderby a.Vereador.nome ascending
                             select new
                             {
                                 ID = a.idComposicaoComissoes,
                                 Vereador = a.Vereador.nome,
                                 Cargo = a.Cargo
                             }).ToList();

                gvListagemComposicaoComissao.DataSource = objs2;
                gvListagemComposicaoComissao.DataBind();

                mtv.SetActiveView(viewComposicao);
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public void salvar()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                Comisso obj = new Comisso();

                if (!string.IsNullOrEmpty(lblID.Text))
                    obj.idComissoes = int.Parse(lblID.Text);

                if (ddlTipoComissao.SelectedIndex > 0)
                    obj.idTipoComissoes = int.Parse(ddlTipoComissao.SelectedValue.ToString());

                obj.Sigla = txtSigla.Text.Trim();
                obj.Titulo = txtTitulo.Text.Trim();
                obj.Finalidade = txtFinalidade.Text.Trim();

                if (!string.IsNullOrEmpty(txtDtCriacao.Text.Trim()))
                    obj.dtCriacao = DateTime.Parse(txtDtCriacao.Text.Trim());

                if (!string.IsNullOrEmpty(txtDtTermino.Text.Trim()))
                    obj.dtTermino = DateTime.Parse(txtDtTermino.Text.Trim());

                ComissoesBO.Salvar(obj);

                if (ddlPresidente.SelectedIndex != 0)
                {
                    ComposicaoComisso obj2 = new ComposicaoComisso();
                    obj2.idComissoes = obj.idComissoes;
                    obj2.idVereador = Convert.ToInt16(ddlPresidente.SelectedValue);
                    obj2.Cargo = "Presidente";
                    ComposicaoComissoesBO.Salvar(obj2);
                }
                if (ddlVicePresidente.SelectedIndex != 0)
                {
                    ComposicaoComisso obj2 = new ComposicaoComisso();
                    obj2.idComissoes = obj.idComissoes;
                    obj2.idVereador = Convert.ToInt16(ddlVicePresidente.SelectedValue);
                    obj2.Cargo = "Vice presidente";
                    ComposicaoComissoesBO.Salvar(obj2);
                }

                lblID.Text = obj.idTipoComissoes.ToString();

                lblSucesso.Text = "Registro salvo com sucesso!";
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void addComissaoComposicao()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                ComposicaoComisso obj = new ComposicaoComisso();

                if (!string.IsNullOrEmpty(lblID.Text))
                {
                    if (ddlVereador.SelectedIndex > 0)
                    {
                        var objs = (from a in bco.ComposicaoComissoes select a).ToList();

                        obj.idComissoes = int.Parse(lblID.Text);
                        obj.idVereador = int.Parse(ddlVereador.SelectedValue);
                        obj.Cargo = ddlCargo.SelectedValue;


                        if (objs.FirstOrDefault(x => x.idComissoes == obj.idComissoes && x.idVereador == obj.idVereador) == null)
                        {

                            ComposicaoComissoesBO.Salvar(obj);

                            atualizaListagem();

                            lblSucesso.Text = "Registro salvo com sucesso!";
                            ddlVereador.SelectedIndex = 0;
                            ddlCargo.SelectedIndex = 0;
                        }
                        else
                            throw new Exception("Este vereador já foi adicionado a esta comissão!");
                    }
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public void excluir(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                ComissoesBO.Excluir(id);

                pesquisar();

                lblSucesso.Text = "Registro Excluído com Sucesso!";
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void excluirComissaoComposicao(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                ComposicaoComissoesBO.Excluir(id);

                atualizaListagem();

                lblSucesso.Text = "Registro Excluído com Sucesso!";
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void limpar()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;
            lblID.Text = string.Empty;


            txtSigla.Text = string.Empty;
            txtTitulo.Text = string.Empty;
            ddlTipoComissao.SelectedIndex = 0;
            txtDtTermino.Text = string.Empty;
            txtDtCriacao.Text = string.Empty;

            txtFinalidade.Text = string.Empty;
            btnComposicao.Visible = false;
        }
        public void carregaForm(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                Comisso obj = ComissoesBO.Selecionar(id);

                if (obj != null)
                {
                    lblID.Text = obj.idComissoes.ToString();

                    ddlTipoComissao.SelectedValue = obj.idTipoComissoes.ToString();

                    txtSigla.Text = obj.Sigla;
                    txtTitulo.Text = obj.Titulo;
                    txtFinalidade.Text = obj.Finalidade;

                    txtDtCriacao.Text = obj.dtCriacao.ToShortDateString();

                    if(obj.dtTermino != null)
                        txtDtTermino.Text = obj.dtTermino.Value.ToShortDateString();

                    btnComposicao.Visible = true;
                    mtv.SetActiveView(viewFormulario);
                }
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }

        #endregion

        #region Eventos do formulario

        #region Grids

        protected void gvListagem_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            if (e.CommandName.Contains("cmdEditar"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                carregaForm(id);
            }
            else if (e.CommandName.Contains("cmdExcluir"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                excluir(id);
            }
        }

        protected void gvListagem_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvListagem.PageIndex = e.NewPageIndex;
            pesquisar();
        }

        protected void gvListagem_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // when mouse is over the row, save original color to new attribute, and change it to highlight yellow color
                e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#BDD9F6'");
                // when mouse leaves the row, change the bg color to its original value   
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle;");
            }
        }


        protected void gvListagemComposicaoComissao_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            if (e.CommandName.Contains("cmdExcluir"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                excluirComissaoComposicao(id);
            }
        }

        protected void gvListagemComposicaoComissao_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvListagemComposicaoComissao.PageIndex = e.NewPageIndex;
            atualizaListagem();
        }

        protected void gvListagemComposicaoComissao_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // when mouse is over the row, save original color to new attribute, and change it to highlight yellow color
                e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#BDD9F6'");
                // when mouse leaves the row, change the bg color to its original value   
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle;");
            }
        }
        
        #endregion

        #region Botões
        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            pesquisar();
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            limpar();
            mtv.SetActiveView(viewFormulario);
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            pesquisar();
            mtv.SetActiveView(viewListagem);
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            salvar();
        }

        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        protected void btnComposicao_Click(object sender, EventArgs e)
        {
            atualizaListagem();
            mtv.SetActiveView(viewComposicao);
        }
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            try
            {
                addComissaoComposicao();
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
            mtv.SetActiveView(viewComposicao);
        }
       
        #endregion


        protected void viewListagem_Activate(object sender, EventArgs e)
        {
            lblHeader.Text = "Pesquisar";
        }

        protected void viewFormulario_Activate(object sender, EventArgs e)
        {
            lblHeader.Text = "Salvar";
        }

        protected void viewComposicao_Activate(object sender, EventArgs e)
        {
            lblHeader.Text = "Composição";
        }
        protected void btnADDMembro_Click(object sender, EventArgs e)
        {
            try
            {
                salvar();

                if (ddlMembro.SelectedIndex != 0)
                {
                    ModeloContainer bco = new ModeloContainer();
                    int idMembro = int.Parse(ddlMembro.SelectedValue);
                    int idComissao = int.Parse(lblID.Text);
                    var membross = bco.ComposicaoComissoes.FirstOrDefault(x => x.idVereador == idMembro && x.idComissoes == idComissao);

                    if (membross == null)
                    {
                        ComposicaoComisso membro = new ComposicaoComisso();
                        membro.idComissoes = int.Parse(lblID.Text);
                        membro.idVereador = int.Parse(ddlMembro.SelectedValue);
                        membro.Cargo = "Membro";
                        ComposicaoComissoesBO.Salvar(membro);
                        carregaForm(idComissao);
                    }
                    else
                        throw new Exception("Esse Vereador já foi adicionado como Membro desta Comissão.");
                }
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
        }

        #endregion
    }
}